package com.munhrasoft.dinamica.business.logic;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.munhrasoft.dinamica.business.entities.ParametrosChkList;
import com.munhrasoft.dinamica.business.entities.ParametrosCusto;
import com.munhrasoft.dinamica.business.entities.ParametrosProcesso;

/**
 * Os parametros de custo, processo e checklist vao ser controlados por este EJB para nao criar outros.
 * 
 * Este EJB vai apenas atualizar os parametros que ja virao numa cadastrados como padrao quando o 
 * sistema for utilizado pela primeira vez
 * 
 * Cada uma das tabelas que controla os parametros abaixo vai possuir apenas um registro
 * 
 * @author vntraal
 * 
 */
@Stateless
public class ParametrosEJB {

    @PersistenceContext(unitName = "dinamicaPU")
    private EntityManager em;

    /**
     * Este parametro carrega os valores padroes para o calculo do custo
     */
    public void carregaParametrosDefault() {
        // pode ser que seja interessante parametrizar esta parte
        // por meio de um arquivo texto ou o proprio excel
        
        //ParametrosChkList paramchk = new ParametrosChkList();
        ParametrosCusto paramcusto = new ParametrosCusto();
        //ParametrosProcesso paramprocess = new ParametrosProcesso();
        
        // parametros de custo
        paramcusto.setIbti(0.02);
        paramcusto.setPesqcadastral(100.00);
        paramcusto.setPremioseguro(100.00);
        paramcusto.setTxccfgts(0.01);
        paramcusto.setTxccsbte(800);
        paramcusto.setVmatricula(200.00);
        paramcusto.setDespachante(120.00);
        
        //parametros de processo
        //precisa ver direito como organizar o processo
        
        //TODO verificar como fazer com os parametros de processo
        
        //TODO verificar como fazer com os parametros de checklist
        
        em.persist(paramcusto);

    }

    public ParametrosCusto atualizaParamCusto(ParametrosCusto pcusto) {
        return em.merge(pcusto);
    }

    public ParametrosProcesso atualizaParamProcesso(ParametrosProcesso pprocesso) {
        return em.merge(pprocesso);
    }

    public ParametrosChkList atualizaParamChk(ParametrosChkList pchklist) {
        return em.merge(pchklist);
    }

    /**
     * retorna o objeto com todos os parametros de custo
     * @return
     */
    
    public ParametrosCusto pegaParamCusto() {  	
    	Query query = em.createNamedQuery("findAllCustoParam");
        if (query.getResultList().size() > 0 && query.getResultList().size() <= 1) {
            // encontrou registro
            return (ParametrosCusto) query.getResultList().get(0);
        } else {
            // nao encontrou registro ou encontrou mais de um o que nao pode
            // tem que dar erro o certo era gerar uma excecao aqui mas vamos retornar nul
            // por enquanto
            return null;
        }
    }

    public ParametrosChkList pegaParamChk() {
        Query query = em.createNamedQuery("findAllChkparam");
        if (query.getResultList().size() > 0 && query.getResultList().size() <= 1) {
            // encontrou registro

            return (ParametrosChkList) query.getResultList().get(0);
        } else {
            // nao encontrou registro ou encontrou mais de um o que nao pode
            // tem que dar erro o certo era gerar uma excecao aqui mas vamos retornar nul
            // por enquanto
            return null;
        }
    }

    public ParametrosProcesso pegaParamProcesso() {
        Query query = em.createNamedQuery("findAllParamProcesso");
        if (query.getResultList().size() > 0 && query.getResultList().size() <= 1) {
            // encontrou registro

            return (ParametrosProcesso) query.getResultList().get(0);
        } else {
            // nao encontrou registro ou encontrou mais de um o que nao pode
            // tem que dar erro o certo era gerar uma excecao aqui mas vamos retornar nul
            // por enquanto
            return null;
        }
    }

}
